#include <iostream>
using namespace std;

struct ListNode {
  int val;
  ListNode *next;
  ListNode(int x) : val(x), next(NULL) {}
};

class RemoveElements(){
public:
    ListNode* removeElements(ListNode* head, int val) {
		// 待删除元素就是头结点
		while(head != NULL && head->val == val){		// 待删除元素在头部有多个
			ListNode* delNode = head;
			head = delNode->next;
			delete delNode;
		}

		if(head == NULL)		// 全部元素均为被删除元素
			return head;
		
		ListNode* cur = head;
		while(cur-> next != NULL){
			if(cur->next->val == val){
				// 删除cur->next
				ListNode* delNode = cur->next;	// 存储待删除节点
				cur->next = delNode->next;		// 跳过要删除节点,当前节点指向下一个节点的下一个节点
				delete delNode;		// 释放内存 delNode->next = null（java）
			}
			else{
				cur = cur->next;
			}
		}        
		return head;
    }
	
};

int main(){

}
